/*
 * ListaParser.cpp
 *
 *  Created on: Oct 15, 2011
 *      Author: lore
 */

#include "ListaParser.h"

ListaParser::ListaParser() {
}

ListaParser::~ListaParser() {
}

vector<Lista> ListaParser::parse(string filePath, unsigned long* registrosOK, unsigned long* registrosFAIL){
	vector<Lista> listasParseadas;

	(*registrosFAIL) = 0;
	(*registrosOK) = 0;

	fstream _file;
	_file.open(filePath.c_str(),ios::out | ios::in);

	if (!_file.is_open()) {

		}
		else {
			/*
			 * Se lee linea por linea
			 */
			string aLine;
			while (getline(_file, aLine)) {
				/*cada linea es del estilo:
				 * 1|20081123|PRO
				 */
				// limpio "aLine
				StringUtils su;
				aLine = su.replaceAllOccurences(aLine,"\r"," ");
				aLine = su.replaceAllOccurences(aLine,"\n"," ");
				su.trim(aLine);

				if (aLine.length() == 0) {
					continue;
				}

				unsigned long id = -1;
				string nombre;

				size_t separator = aLine.find_first_of('|', 0);
				/*
				 * Obtiene posicion del primer separador en la linea
				 */

				if (separator == string::npos) {
				(*registrosFAIL)++;
				continue;
				}

				string idText = aLine.substr(0,separator);

				size_t separator2 = aLine.find_first_of('|', separator+1);
				string eleccionId = aLine.substr(separator + 1,separator2-separator-1);


				nombre = aLine.substr(separator2 + 1);

				id = strtoul(idText.c_str(),NULL,0);

				unsigned long idElec = strtoul(eleccionId.c_str(),NULL,0);

				if (id <= 0) {
					(*registrosFAIL)++;
					continue;
				}
				/*Creo el objeto Lista*/

				Lista lista;

				lista.setIdEleccion(idElec);
				lista.setNombreLista(nombre);
				lista.setId(id);

				listasParseadas.push_back(lista);
				(*registrosOK)++;

			}
		}

		return listasParseadas;
}
